Skip to content

docs: digital cards, Google avatar upload, bulk device un-manage - #75

Merged
shiftcontrol-dan merged 3 commits into
mainfrom
docs/digital-cards-avatar-bulk-unmanage
Jul 30, 2026
Merged

docs: digital cards, Google avatar upload, bulk device un-manage#75
shiftcontrol-dan merged 3 commits into
mainfrom
docs/digital-cards-avatar-bulk-unmanage

Conversation

@shiftcontrol-dan

@shiftcontrol-dan shiftcontrol-dan commented Jul 30, 2026

Copy link
Copy Markdown
Collaborator

Adds documentation for three features: digital business cards, Google Workspace profile photo upload, and bulk device un-manage.

New section: Digital Cards

A new category under Using ShiftControl, between Devices and Reports:

Page Covers
Overview What the feature is, the three surfaces it spans, how published cards are served, what keeps a public card from being a privacy problem, and which permission controls what
Template The four card layouts, brand colour, logo placement, legal links and disclaimer, the ShiftControl badge, and the default QR medallion
Fields Locked / Editable / Optional field modes, directory sync and the Customize-then-Re-sync flow, the full catalogue of fields you can add, and the two employee self-service switches
Offboarding Generic card, Redirect, and Hard 404 policies, plus the optional grace period
Domain The always-on ShiftControl hostname and how to serve cards from your own subdomain
Managing a user's card Admin-on-behalf lifecycle: activation, overriding locked fields, publish and unpublish, card PIN, link rotation, and permanent deletion

Each page carries a feature-availability admonition, since digital cards is enabled per organization under Settings → Features.

Sidebar labels use the product's own tab names (Template, Fields, Offboarding, Domain) rather than repeating "Card" beneath a "Digital Cards" parent. Page titles are unchanged.

New page: My Digital Card (Employee Guide)

employee-guide/employee-portal/my-card, written for employees rather than admins. Covers activating a card, then all four tabs: viewing and sharing it, editing photo and details, choosing a QR medallion, and publishing plus the card PIN. Includes a common-questions section on who can see a card, what happens when someone leaves, and why some fields can't be edited.

Updated pages

Users → Editing a user — new Profile Photo section, shown only for organizations with a Google Workspace directory. Explains that the image is written straight to the user's Google Workspace profile and appears across Gmail, Calendar, Drive, and Chat; documents the 10 MB and image-only limits, Google's thumbnail resize, and why the control is unavailable for users who aren't linked in Google Workspace.

Devices → Device actions — new Un-managing several devices at once section covering the type-to-confirm step, per-device success and failure reporting, throttling, and the fact that bulk un-manage uses the same permission as the single-device action. Includes a warning to capture disk-encryption recovery keys before running a batch, since there is no bulk reveal. Cross-linked from the existing no-bulk-erase note.

Devices → Viewing devices — documents multi-select and the Bulk Actions menu on the inventory grid, with a tip to filter before selecting.

Screenshots

62 new screenshots, captured at the standard 1440x900 viewport across all three directory configurations and both light and dark themes.

Three configurations rather than one: ModeScreenshot resolves the screenshot folder from the reader's selected configuration and does not silently fall back, so a single-configuration capture would have rendered broken images for JumpCloud-only and Google-only readers.

Two deliberate coverage gaps, both gated via the modes prop so nothing renders broken, consistent with how other configuration-specific features are handled:

  • Bulk device un-manage has no Google-only variant, because devices require JumpCloud
  • The profile photo affordance has no JumpCloud-only variant, because it requires a Google Workspace directory

screenshot-manifest.json gains entries and direct URLs for every new screenshot, along with the interaction notes needed to recapture them: the card designer's sub-tab state is component-local so tabs must be clicked rather than addressed by URL, the device grid's selection checkboxes aren't exposed to the accessibility tree, the bulk-actions trigger stays disabled below two selected rows, and demo user ids differ per directory configuration.

That last note came out of a review catch on this PR. The Google-only capture of the profile-photo affordance initially used a JumpCloud-style user id, which resolved a demo record with no Google Workspace linkage and therefore showed no photo and no edit badge — the exact control the surrounding text tells readers to click. It has been recaptured against a correctly linked record, and the constraint is now written into the manifest so a future recapture can't repeat it.

Verification

  • npm run build passes with no broken links and no broken anchors, including the new cross-reference into the bulk un-manage section.
  • scripts/check-images.sh reports 0 broken references. The duplicate-hash groups it lists are all pre-existing.
  • Pages were checked as rendered output in a real browser, not just by status code: the Digital Cards and My Digital Card pages were inspected with every embedded screenshot confirmed visible, all new and updated routes return 200, and the Google-only profile-photo image was re-verified on the deployed preview with the configuration selector in its default Google Workspace state.

Note for reviewers

This branch also includes a dependency-bump commit (React 19.2.8 and related updates, package version 1.3.1) that is unrelated to the documentation changes. Happy to split it into its own PR if you'd prefer to review it separately.

New Digital Cards section (ENG-542 / ENG-555 / ENG-556):
- Overview, Template, Fields, Offboarding, Domain, Managing a user's card
- Employee Guide page for the employee portal 'My digital card' surface
- Includes a feature-availability admonition: the feature is enabled
  per-org under Settings > Features > Digital Business Cards

Google Workspace profile photo (ENG-656):
- New Profile Photo section on Editing a user, gated to orgs with a
  Google directory; documents the 10 MB / image-only limits, Google's
  thumbnail resize, and why JumpCloud-only users are excluded

Bulk device un-manage (ENG-592):
- Device actions: new 'Un-managing several devices at once' section
  covering type-to-confirm, per-device results, throttling, and the
  shared CanDeleteDevices permission
- Viewing devices: multi-select and Bulk Actions on the inventory grid

62 screenshots captured from demo.shiftcontrol.io at 1440x900 across
jc-google / jc-only / gws-only and light + dark. New screenshots and the
routes/interactions needed to recapture them are registered in
screenshot-manifest.json.

npm run build passes with no broken links or anchors;
scripts/check-images.sh reports 0 broken references.
- Update React and React DOM from 19.2.7 to 19.2.8
- Update body-parser from 1.20.5 to 1.20.6
- Update brace-expansion from 5.0.6 to 5.0.8 with Node.js engine constraint change
- Update fast-uri from 3.1.2 to 3.1.4
- Update js-yaml from 4.2.0 to 4.3.0
- Update nanoid from 3.3.11 to 3.3.16
- Update postcss from 8.5.14 to 8.5.25
- Update shell-quote from 1.8.4 to 1.10.0
- Bump package version to 1.3.1
The gws-only variants of Users/User-avatar-upload were captured using the
JumpCloud Mongo user id from the manifest's knownIds while in gws_only
mode. That id has no Google directory linkage in the Google-only demo, so
the record rendered as initials with no photo and no pencil badge — the
exact affordance the surrounding docs tell the reader to click.

AddOrEditUser.tsx renders the pencil badge only when
isEligibleForAvatarUpload is true, which requires the user to be present
in an enabled Google directory. Recaptured both themes against Google
numeric user id 100000000000000000001, which resolves a properly linked
record and shows the badge.

This was a capture error, not a product limitation: the Google-only path
works, so the documented requirements are unchanged.

Recorded the mode-specific user-id trap in screenshot-manifest.json
(knownIds note plus the Users/User-avatar-upload action field) so a future
recapture doesn't repeat it.
@cloudflare-workers-and-pages

Copy link
Copy Markdown

Deploying shiftcontrol-docs-prod with  Cloudflare Pages  Cloudflare Pages

Latest commit: 65aebc4
Status: ✅  Deploy successful!
Preview URL: https://e46c8342.shiftcontrol-docs-prod.pages.dev
Branch Preview URL: https://docs-digital-cards-avatar-bu.shiftcontrol-docs-prod.pages.dev

View logs

@shiftcontrol-dan
shiftcontrol-dan merged commit 08ca7e5 into main Jul 30, 2026
5 checks passed
@shiftcontrol-dan
shiftcontrol-dan deleted the docs/digital-cards-avatar-bulk-unmanage branch July 30, 2026 02:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant